/**
 * 工厂模式：它提供了一种在不指定具体类的情况下创建对象的接口。工厂模式将对象的创建与使用解耦，使得代码更加灵活，易于扩展和维护。
 * 特点：不指定具体类、对象创建和使用解耦
 * 实现：
 * 1.定义工厂类
 * 2.定义工厂业务类
 * 3.用工厂类创建工厂业务类
 */
public class FactoryPattern {
    public static void main(String[] args) {
        //创建对象只要根据工厂去创建指定的对象即可
        AnimalFactory animalFactory = new AnimalFactory();
        Animal dog = animalFactory.createAnimal("dog");
        dog.speak();

        //cat
        Animal cat = animalFactory.createAnimal("cat");
        cat.speak();
    }
}
//工厂类
abstract class Animal{
    public abstract void speak();
}
//工厂业务类:dog
class Dog extends Animal{
    public void speak(){
        System.out.println("汪汪汪！！！");
    }
}
//工厂业务类:cat
class Cat extends Animal{
    public void speak(){
        System.out.println("喵喵喵！！！");
    }
}
//工厂:用于创造业务类
class AnimalFactory{
    public Animal createAnimal(String type){
        if("dog".equals(type)){
            return new Dog();
        }
        else if("cat".equals(type)){
            return new Cat();
        }else{
            return null;
        }
    }
}
